import os
import random
import time

from flask import Flask

from config.logger_config import logger

# hypercorn --bind 0.0.0.0:5600 --workers 1 flask_async_web:asgi_app -k asyncio
app = Flask(__name__)

global_variable = random.randint(1,  1000)

def cpu_busy(second):
    # 简单的循环计算来占用CPU资源
    start_time = time.time()
    while time.time()  - start_time < second:  # 模拟second秒的CPU繁忙
        # 执行一些计算密集型操作
        for _ in range(10 ** 6):
            x = 3.14159 * 2.71828  # 任意数学运算

@app.route('/get-sync', methods=['GET'])
def hello2():
    worker_pid = os.getpid()  # 获取当前worker的PID
    logger.debug(f"global_variable:{global_variable}， sync api {time.time()} by worker PID:{worker_pid}")
    cpu_busy(3)
    return f'Hello, World! {time.time()}'



# 即使对于异步视图，每个请求仍然会绑定一个 worker。好处是您可以在一个视图内运行异步代码，例如多个并发数据库查询，对外部 API 的 HTTP 请求，等等。
# 但是，您的应用程序可以处理的请求并发数量将保持不变。
# 可以使用如下方式启动:
# hypercorn flask_async_web:app --bind 0.0.0.0:5600 -w 1 -k asyncio
# gunicorn --workers 1 --threads 1 --timeout 0 --bind 0.0.0.0:5600 flask_async_web:app
# gunicorn -c gunicorn_config_4_flask_sync_web.py flask_sync_web:app
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5600)
    # import uvicorn
    # uvicorn.run(asgi_app, host="127.0.0.1", port=5600)   # ASGI 'lifespan' protocol appears unsupported.